package 牛客_面试必刷.Month07.day08;

public class 删除链表当中的重复元素_2 {
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        ListNode node = new ListNode(Integer.MAX_VALUE);
        node.next = head;
        ListNode pre = node;//记录i指针也就是前指针的上一个走过的节点
        ListNode i = node;//标记前指针
        ListNode j = head;//标记后指针
        while(j != null){
            //如果说i和j当前下标不同
            if(i.val != j.val){
                pre = i;//标记i指针当前所在的节点，方便回退
                i = i.next;//i指针往后走
                i.val = j.val;//走完之后对i下标的值进行更新
                j = j.next;//j指针往后走
            }else {//如果说两个值不同
                //这里你就要让j指针走到和i指针不同的地方
                while(j != null && i.val == j.val) {j = j.next;}
                //然后再进行回退
                i = pre;
            }
        }
        //最后情理无关部分
        i.next = null;
        return node.next;
    }
}
